// #include <linux/hrtimer.h>

/**
 * struct hrtimer - the basic hrtimer structure
 * @node:  timerqueue node, which also manages node.expires,
 *    the absolute expiry time in the hrtimers internal
 *    representation. The time is related to the clock on
 *    which the timer is based. Is setup by adding
 *    slack to the _softexpires value. For non range timers
 *    identical to _softexpires.
 * @_softexpires: the absolute earliest expiry time of the hrtimer.
 *    The time which was given as expiry time when the timer
 *    was armed.
 * @function:  timer expiry callback function
 * @base:  pointer to the timer base (per cpu and per clock)
 * @state:  state information (See bit values above)
 * @start_site:  timer statistics field to store the site where the timer
 *    was started
 * @start_comm: timer statistics field to store the name of the process which
 *    started the timer
 * @start_pid: timer statistics field to store the pid of the task which
 *    started the timer
 *
 * The hrtimer structure must be initialized by hrtimer_init()
 */
struct hrtimer {
  struct timerqueue_node    node;
  ktime_t        _softexpires; 
  enum hrtimer_restart    (*function)(struct hrtimer *);
  struct hrtimer_clock_base  *base;
  unsigned long      state;
#ifdef CONFIG_TIMER_STATS
  int        start_pid;
  void        *start_site;
  char        start_comm[16];
#endif
};